package kotlinquanweizhinan.chapt05匿名函数与函数类型.函数引用

class SimVillage {
}

fun main(args:Array<String>) {
    /**
     * 获得函数引用 使用::操作符，后跟要引用的函数名。
     */
    runSimulation("Guyal",::printConstructionCost){ playerName,numBuildings ->
        val currentYear = 2018
        println("Adding $numBuildings houses")
        "Welcome to SimVillage,$playerName!(copyreight $currentYear)"
    }
}

/**
 * runSimulation函数有两个参数，一个是玩家的名字，一个是greetingFunction。
 * 其中，greetingFunction也是一个函数，它也有两个参数，一个String类型和一个
 * Int类型，它返回String类型的数据。runSimulation函数首先产生一个随机数。然
 * 后，使用随机数和玩家名(传入的值参)，调用传入的greetingFunction函数。
 *
 * 增加一个名为costPrinter的函数参数，该函数将使用runSimulation函数里的值输出房屋的建设成本。
 */
inline fun runSimulation(playerName:String,
                         costPrinter:(Int) ->Unit,
                         greetingFunction:(String,Int) ->String){
    val numBuildings = (1..3).shuffled().last() //Randomly selects 1,2,or3
    costPrinter(numBuildings)
    println(greetingFunction(playerName,numBuildings))
}


fun printConstructionCost(numberBindings:Int){
    val cost = 500
    println("construction cost:${cost * numberBindings}")
}